﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using java.lang;
using java.util;
using Enum = java.lang.Enum;

namespace Game.model.@base
{
    public class ClassId
    {
        private int _id;
	    
	    public Race _race;
	   
	    private ClassId _parent;
	   
	    private ClassId _parent2;
	   
	    private ClassLevel _level;
	   
	    private ClassType _type;
	   
	    private ClassType2 _type2;
        private ClassId(int id, ClassType classType, Race? race, ClassId parent, ClassLevel level, ClassType2 classType2):
            this(id, classType, (Race) race, parent, null, level, classType2)
        {
            //;
        }
        private ClassId(int id, ClassType classType, Race? race, ClassId parent, ClassId parent2, ClassLevel level, ClassType2 classType2)
        {
            _id = id;
            _type = classType;
            _race = race;
            _parent = parent;
            _parent2 = parent2;
            _level = level;
            _type2 = classType2;
            Setup();
        }
        public int getId()
	    {
		    return _id;
	    }
	    public Race getRace()
	    {
		    return _race;
	    }
	    public bool isOfRace(Race race)
	    {
		    return _race == race;
	    }
	    public ClassLevel getClassLevel()
	    {
		    return _level;
	    }
        public bool isOfLevel(ClassLevel level)
	    {
		    return _level == level;
	    }
	    public ClassType getType()
	    {
		    return _type;
	    }
	    public bool isOfType(ClassType type)
	    {
		    return _type == type;
	    }
	    public ClassType2 getType2()
	    {
		    return _type2;
	    }
        public bool isMage()
	    {
		    return _type.isMagician();
	    }
	    public bool childOf(ClassId cid)
	    {
		    if ((_parent == null) && (_id < 139))
		    {
			    return false;
		    }
		    if ((_parent == cid) || (_parent2 == cid))
		    {
			    return true;
		    }
		    if (_id > 138)
		    {
		        var temp = (Map) _childClasses.get(this);
			    return temp.containsValue(cid);
		    }
		    return _parent != null && _parent.childOf(cid);
	    }
        private static long serialVersionUID = 1L;
        public Map _childClasses = new HashMap();
        
        void Setup()
        {
            //var temp = new object[](ClassId.PHOENIX_KNIGHT, ClassId.HELL_KNIGHT, ClassId.EVAS_TEMPLAR, ClassId.SHILLIEN_TEMPLAR);
            var sc = new List<ClassId> {ClassId.PHOENIX_KNIGHT, ClassId.HELL_KNIGHT, ClassId.EVAS_TEMPLAR, ClassId.SHILLIEN_TEMPLAR};
            _childClasses.put(sigelKnight, sc);
            sc = new List<ClassId>
                {
                    ClassId.DUELIST,
                    ClassId.DREADNOUGHT,
                    ClassId.TITAN,
                    ClassId.GRAND_KHAVATARI,
                    ClassId.MAESTRO,
                    ClassId.DOOMBRINGER
                };
            _childClasses.put(tyrrWarrior,sc);
            sc = new List<ClassId>
                {
                    ClassId.ADVENTURER,
                    ClassId.WIND_RIDER,
                    ClassId.GHOST_HUNTER,
                    ClassId.FORTUNE_SEEKER
                };
            _childClasses.put(othellRogue, sc);
            sc = new List<ClassId>
                {
                   ClassId.SAGITTARIUS, ClassId.MOONLIGHT_SENTINEL, ClassId.GHOST_SENTINEL, ClassId.TRICKSTER
                };
            _childClasses.put(yulArcher, sc);
            sc = new List<ClassId>
                {
                   ClassId.ARCHMAGE, ClassId.SOULTAKER, ClassId.MYSTIC_MUSE, ClassId.STORM_SCREAMER, ClassId.M_SOUL_HOUND, ClassId.F_SOUL_HOUND
                };
            _childClasses.put(feohWizard, sc);
            sc = new List<ClassId>
                {
                  ClassId.HIEROPHANT, ClassId.SWORD_MUSE, ClassId.SPECTRAL_DANCER, ClassId.DOMINATOR, ClassId.DOOMCRYER, ClassId.JUDICATOR};
            _childClasses.put(issEnchanter, sc);
            sc = new List<ClassId>
                {
                   ClassId.ARCANA_LORD, ClassId.ELEMENTAL_MASTER, ClassId.SPECTRAL_MASTER
                };
            _childClasses.put(wynnSummoner, sc);
            sc = new List<ClassId>
                {
                   ClassId.CARDINAL, ClassId.EVAS_SAINT, ClassId.SHILLIEN_SAINT
                };
            _childClasses.put(aeoreHealer, sc);
        }
        public bool equalsOrChildOf(ClassId cid)
	    {
		    return (this == cid) || (childOf(cid));
	    }
        public ClassId getParent(int sex)
	    {
		    return (sex == 0) || (_parent2 == null) ? _parent : _parent2;
	    }
            public int getParentId()
	    {
		    return _parent.getId();
	    }
        public int level()
	    {
		    if (_parent == null)
		    {
			    return 0;
		    }
		    return 1 + _parent.level();
	    }
        public static readonly ClassId HUMAN_FIGHTER = new ClassId(0, ClassType.FIGHTER, Race.human, null, ClassLevel.First, null);

        public static readonly ClassId WARRIOR = new ClassId(1, ClassType.FIGHTER, Race.human, HUMAN_FIGHTER,
                                                             ClassLevel.Second, null);

        public static readonly ClassId GLADIATOR = new ClassId(2, ClassType.FIGHTER, Race.human, WARRIOR,
                                                               ClassLevel.Third, ClassType2.Warrior);

        public static readonly ClassId WARLORD = new ClassId(3, ClassType.FIGHTER, Race.human, WARRIOR, ClassLevel.Third,
                                                             ClassType2.Warrior);

        public static readonly ClassId KNIGHT = new ClassId(4, ClassType.FIGHTER, Race.human, HUMAN_FIGHTER,
                                                            ClassLevel.Second, null);

        public static readonly ClassId PALADIN = new ClassId(5, ClassType.FIGHTER, Race.human, KNIGHT, ClassLevel.Third,
                                                             ClassType2.Knight);

        public static readonly ClassId DARK_AVENGER = new ClassId(6, ClassType.FIGHTER, Race.human, KNIGHT,
                                                                  ClassLevel.Third, ClassType2.Knight);

        public static readonly ClassId ROGUE = new ClassId(7, ClassType.FIGHTER, Race.human, HUMAN_FIGHTER,
                                                           ClassLevel.Second, null);

        public static readonly ClassId TREASURE_HUNTER = new ClassId(8, ClassType.FIGHTER, Race.human, ROGUE,
                                                                     ClassLevel.Third, ClassType2.Rogue);

        public static readonly ClassId HAWKEYE = new ClassId(9, ClassType.FIGHTER, Race.human, ROGUE, ClassLevel.Third,
                                                             ClassType2.Archer);

        public static readonly ClassId HUMAN_MAGE = new ClassId(10, ClassType.MYSTIC, Race.human, null, ClassLevel.First,
                                                                null);

        public static readonly ClassId WIZARD = new ClassId(11, ClassType.MYSTIC, Race.human, HUMAN_MAGE,
                                                            ClassLevel.Second, null);

        public static readonly ClassId SORCERER = new ClassId(12, ClassType.MYSTIC, Race.human, WIZARD, ClassLevel.Third,
                                                              ClassType2.Wizard);

        public static readonly ClassId NECROMANCER = new ClassId(13, ClassType.MYSTIC, Race.human, WIZARD,
                                                                 ClassLevel.Third, ClassType2.Wizard);

        public static readonly ClassId WARLOCK = new ClassId(14, ClassType.MYSTIC, Race.human, WIZARD, ClassLevel.Third,
                                                             ClassType2.Summoner);

        public static readonly ClassId CLERIC = new ClassId(15, ClassType.PRIEST, Race.human, HUMAN_MAGE,
                                                            ClassLevel.Second, null);

        public static readonly ClassId BISHOP = new ClassId(16, ClassType.PRIEST, Race.human, CLERIC, ClassLevel.Third,
                                                            ClassType2.Healer);

        public static readonly ClassId PROPHET = new ClassId(17, ClassType.PRIEST, Race.human, CLERIC, ClassLevel.Third,
                                                             ClassType2.Enchanter);

        public static readonly ClassId ELVEN_FIGHTER = new ClassId(18, ClassType.FIGHTER, Race.elf, null,
                                                                   ClassLevel.First, null);

        public static readonly ClassId ELVEN_KNIGHT = new ClassId(19, ClassType.FIGHTER, Race.elf, ELVEN_FIGHTER,
                                                                  ClassLevel.Second, null);

        public static readonly ClassId TEMPLE_KNIGHT = new ClassId(20, ClassType.FIGHTER, Race.elf, ELVEN_KNIGHT,
                                                                   ClassLevel.Third, ClassType2.Knight);

        public static readonly ClassId SWORDSINGER = new ClassId(21, ClassType.FIGHTER, Race.elf, ELVEN_KNIGHT,
                                                                 ClassLevel.Third, ClassType2.Enchanter);

        public static readonly ClassId ELVEN_SCOUT = new ClassId(22, ClassType.FIGHTER, Race.elf, ELVEN_FIGHTER,
                                                                 ClassLevel.Second, null);
        public static readonly ClassId PLAIN_WALKER = new ClassId(23, ClassType.FIGHTER, Race.elf, ELVEN_SCOUT, ClassLevel.Third, ClassType2.Rogue);

        public static readonly ClassId SILVER_RANGER = new ClassId(24, ClassType.FIGHTER, Race.elf, ELVEN_SCOUT,
                                                                   ClassLevel.Third, ClassType2.Archer);

        public static readonly ClassId ELVEN_MAGE = new ClassId(25, ClassType.MYSTIC, Race.elf, null, ClassLevel.First,
                                                                null);

        public static readonly ClassId ELVEN_WIZARD = new ClassId(26, ClassType.MYSTIC, Race.elf, ELVEN_MAGE,
                                                                  ClassLevel.Second, null);

        public static readonly ClassId SPELLSINGER = new ClassId(27, ClassType.MYSTIC, Race.elf, ELVEN_WIZARD,
                                                                 ClassLevel.Third, ClassType2.Wizard);
        public static readonly ClassId ELEMENTAL_SUMMONER = new ClassId(28, ClassType.MYSTIC, Race.elf, ELVEN_WIZARD, ClassLevel.Third, ClassType2.Summoner);

        public static readonly ClassId ORACLE = new ClassId(29, ClassType.PRIEST, Race.elf, ELVEN_MAGE,
                                                            ClassLevel.Second, null);

        public static readonly ClassId ELDER = new ClassId(30, ClassType.PRIEST, Race.elf, ORACLE, ClassLevel.Third,
                                                           ClassType2.Healer);

        public static readonly ClassId DARK_FIGHTER = new ClassId(31, ClassType.FIGHTER, Race.darkelf, null,
                                                                  ClassLevel.First, null);

        public static readonly ClassId PALUS_KNIGHT = new ClassId(32, ClassType.FIGHTER, Race.darkelf, DARK_FIGHTER,
                                                                  ClassLevel.Second, null);

        public static readonly ClassId SHILLEN_KNIGHT = new ClassId(33, ClassType.FIGHTER, Race.darkelf, PALUS_KNIGHT,
                                                                    ClassLevel.Third, ClassType2.Knight);

        public static readonly ClassId BLADEDANCER = new ClassId(34, ClassType.FIGHTER, Race.darkelf, PALUS_KNIGHT,
                                                                 ClassLevel.Third, ClassType2.Enchanter);

        public static readonly ClassId ASSASIN = new ClassId(35, ClassType.FIGHTER, Race.darkelf, DARK_FIGHTER,
                                                             ClassLevel.Second, null);

        public static readonly ClassId ABYSS_WALKER = new ClassId(36, ClassType.FIGHTER, Race.darkelf, ASSASIN,
                                                                  ClassLevel.Third, ClassType2.Rogue);
        public static readonly ClassId PHANTOM_RANGER = new ClassId(37, ClassType.FIGHTER, Race.darkelf, ASSASIN, ClassLevel.Third, ClassType2.Archer);

        public static readonly ClassId DARK_MAGE = new ClassId(38, ClassType.MYSTIC, Race.darkelf, null,
                                                               ClassLevel.First, null);

        public static readonly ClassId DARK_WIZARD = new ClassId(39, ClassType.MYSTIC, Race.darkelf, DARK_MAGE,
                                                                 ClassLevel.Second, null);

        public static readonly ClassId SPELLHOWLER = new ClassId(40, ClassType.MYSTIC, Race.darkelf, DARK_WIZARD,
                                                                 ClassLevel.Third, ClassType2.Wizard);

        public static readonly ClassId PHANTOM_SUMMONER = new ClassId(41, ClassType.MYSTIC, Race.darkelf, DARK_WIZARD,
                                                                      ClassLevel.Third, ClassType2.Summoner);

        public static readonly ClassId SHILLEN_ORACLE = new ClassId(42, ClassType.PRIEST, Race.darkelf, DARK_MAGE,
                                                                    ClassLevel.Second, null);

        public static readonly ClassId SHILLEN_ELDER = new ClassId(43, ClassType.PRIEST, Race.darkelf, SHILLEN_ORACLE,
                                                                   ClassLevel.Third, ClassType2.Healer);
        public static readonly ClassId ORC_FIGHTER = new ClassId(44, ClassType.FIGHTER, Race.orc, null, ClassLevel.First, null);
        public static readonly ClassId ORC_RAIDER = new ClassId(45, ClassType.FIGHTER, Race.orc, ORC_FIGHTER, ClassLevel.Second, null);

        public static readonly ClassId DESTROYER = new ClassId(46, ClassType.FIGHTER, Race.orc, ORC_RAIDER,
                                                               ClassLevel.Third, ClassType2.Warrior);

        public static readonly ClassId ORC_MONK = new ClassId(47, ClassType.FIGHTER, Race.orc, ORC_FIGHTER,
                                                              ClassLevel.Second, null);

        public static readonly ClassId TYRANT = new ClassId(48, ClassType.FIGHTER, Race.orc, ORC_MONK, ClassLevel.Third,
                                                            ClassType2.Warrior);

        public static readonly ClassId ORC_MAGE = new ClassId(49, ClassType.MYSTIC, Race.orc, null, ClassLevel.First,
                                                              null);

        public static readonly ClassId ORC_SHAMAN = new ClassId(50, ClassType.MYSTIC, Race.orc, ORC_MAGE,
                                                                ClassLevel.Second, null);

        public static readonly ClassId OVERLORD = new ClassId(51, ClassType.MYSTIC, Race.orc, ORC_SHAMAN,
                                                              ClassLevel.Third, ClassType2.Enchanter);
        public static readonly ClassId WARCRYER = new ClassId(52, ClassType.MYSTIC, Race.orc, ORC_SHAMAN, ClassLevel.Third, ClassType2.Enchanter);

        public static readonly ClassId DWARVEN_FIGHTER = new ClassId(53, ClassType.FIGHTER, Race.dwarf, null,
                                                                     ClassLevel.First, null);
        public static readonly ClassId SCAVENGER = new ClassId(54, ClassType.FIGHTER, Race.dwarf, DWARVEN_FIGHTER, ClassLevel.Second, null);
        public static readonly ClassId BOUNTY_HUNTER = new ClassId(55, ClassType.FIGHTER, Race.dwarf, SCAVENGER, ClassLevel.Third, ClassType2.Rogue);
        public static readonly ClassId ARTISAN = new ClassId(56, ClassType.FIGHTER, Race.dwarf, DWARVEN_FIGHTER, ClassLevel.Second, null);
        public static readonly ClassId WARSMITH = new ClassId(57, ClassType.FIGHTER, Race.dwarf, ARTISAN, ClassLevel.Third, ClassType2.Warrior);
        public static readonly ClassId DUMMY_ENTRY_1 = new ClassId(58, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_2 = new ClassId(59, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_3 = new ClassId(60, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_4 = new ClassId(61, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_5 = new ClassId(62, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_6 = new ClassId(63, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_7 = new ClassId(64, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_8 = new ClassId(65, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_9 = new ClassId(66, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_10 = new ClassId(67, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_11 = new ClassId(68, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_12 = new ClassId(69, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_13 = new ClassId(70, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_14 = new ClassId(71, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_15 = new ClassId(72, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_16 = new ClassId(73, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_17 = new ClassId(74, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_18 = new ClassId(75, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_19 = new ClassId(76, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_20 = new ClassId(77, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_21 = new ClassId(78, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_22 = new ClassId(79, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_23 = new ClassId(80, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_24 = new ClassId(81, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_25 = new ClassId(82, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_26 = new ClassId(83, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_27 = new ClassId(84, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_28 = new ClassId(85, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_29 = new ClassId(86, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_30 = new ClassId(87, null, null, null, null, null);
        public static readonly ClassId DUELIST = new ClassId(88, ClassType.FIGHTER, Race.human, GLADIATOR, ClassLevel.Fourth, ClassType2.Warrior);

        public static readonly ClassId DREADNOUGHT = new ClassId(89, ClassType.FIGHTER, Race.human, WARLORD,
                                                                 ClassLevel.Fourth, ClassType2.Warrior);
        public static readonly ClassId PHOENIX_KNIGHT = new ClassId(90, ClassType.FIGHTER, Race.human, PALADIN, ClassLevel.Fourth, ClassType2.Knight);
        public static readonly ClassId HELL_KNIGHT = new ClassId(91, ClassType.FIGHTER, Race.human, DARK_AVENGER, ClassLevel.Fourth, ClassType2.Knight);

        public static readonly ClassId SAGITTARIUS = new ClassId(92, ClassType.FIGHTER, Race.human, HAWKEYE,
                                                                 ClassLevel.Fourth, ClassType2.Archer);

        public static readonly ClassId ADVENTURER = new ClassId(93, ClassType.FIGHTER, Race.human, TREASURE_HUNTER,
                                                                ClassLevel.Fourth, ClassType2.Rogue);
        public static readonly ClassId ARCHMAGE = new ClassId(94, ClassType.MYSTIC, Race.human, SORCERER, ClassLevel.Fourth, ClassType2.Wizard);

        public static readonly ClassId SOULTAKER = new ClassId(95, ClassType.MYSTIC, Race.human, NECROMANCER,
                                                               ClassLevel.Fourth, ClassType2.Wizard);

        public static readonly ClassId ARCANA_LORD = new ClassId(96, ClassType.MYSTIC, Race.human, WARLOCK,
                                                                 ClassLevel.Fourth, ClassType2.Summoner);
        public static readonly ClassId CARDINAL = new ClassId(97, ClassType.PRIEST, Race.human, BISHOP, ClassLevel.Fourth, ClassType2.Healer);

        public static readonly ClassId HIEROPHANT = new ClassId(98, ClassType.PRIEST, Race.human, PROPHET,
                                                                ClassLevel.Fourth, ClassType2.Enchanter);

        public static readonly ClassId EVAS_TEMPLAR = new ClassId(99, ClassType.FIGHTER, Race.elf, TEMPLE_KNIGHT,
                                                                  ClassLevel.Fourth, ClassType2.Knight);

        public static readonly ClassId SWORD_MUSE = new ClassId(100, ClassType.FIGHTER, Race.elf, SWORDSINGER,
                                                                ClassLevel.Fourth, ClassType2.Enchanter);

        public static readonly ClassId WIND_RIDER = new ClassId(101, ClassType.FIGHTER, Race.elf, PLAIN_WALKER,
                                                                ClassLevel.Fourth, ClassType2.Rogue);

        public static readonly ClassId MOONLIGHT_SENTINEL = new ClassId(102, ClassType.FIGHTER, Race.elf, SILVER_RANGER,
                                                                        ClassLevel.Fourth, ClassType2.Archer);

        public static readonly ClassId MYSTIC_MUSE = new ClassId(103, ClassType.MYSTIC, Race.elf, SPELLSINGER,
                                                                 ClassLevel.Fourth, ClassType2.Wizard);

        public static readonly ClassId ELEMENTAL_MASTER = new ClassId(104, ClassType.MYSTIC, Race.elf,
                                                                      ELEMENTAL_SUMMONER, ClassLevel.Fourth,
                                                                      ClassType2.Summoner);

        public static readonly ClassId EVAS_SAINT = new ClassId(105, ClassType.PRIEST, Race.elf, ELDER,
                                                                ClassLevel.Fourth, ClassType2.Healer);

        public static readonly ClassId SHILLIEN_TEMPLAR = new ClassId(106, ClassType.FIGHTER, Race.darkelf,
                                                                      SHILLEN_KNIGHT, ClassLevel.Fourth,
                                                                      ClassType2.Knight);

        public static readonly ClassId SPECTRAL_DANCER = new ClassId(107, ClassType.FIGHTER, Race.darkelf, BLADEDANCER,
                                                                     ClassLevel.Fourth, ClassType2.Enchanter);

        public static readonly ClassId GHOST_HUNTER = new ClassId(108, ClassType.FIGHTER, Race.darkelf, ABYSS_WALKER,
                                                                  ClassLevel.Fourth, ClassType2.Rogue);

        public static readonly ClassId GHOST_SENTINEL = new ClassId(109, ClassType.FIGHTER, Race.darkelf, PHANTOM_RANGER,
                                                                    ClassLevel.Fourth, ClassType2.Archer);

        public static readonly ClassId STORM_SCREAMER = new ClassId(110, ClassType.MYSTIC, Race.darkelf, SPELLHOWLER,
                                                                    ClassLevel.Fourth, ClassType2.Wizard);

        public static readonly ClassId SPECTRAL_MASTER = new ClassId(111, ClassType.MYSTIC, Race.darkelf,
                                                                     PHANTOM_SUMMONER, ClassLevel.Fourth,
                                                                     ClassType2.Summoner);

        public static readonly ClassId SHILLIEN_SAINT = new ClassId(112, ClassType.PRIEST, Race.darkelf, SHILLEN_ELDER,
                                                                    ClassLevel.Fourth, ClassType2.Healer);

        public static readonly ClassId TITAN = new ClassId(113, ClassType.FIGHTER, Race.orc, DESTROYER,
                                                           ClassLevel.Fourth, ClassType2.Warrior);

        public static readonly ClassId GRAND_KHAVATARI = new ClassId(114, ClassType.FIGHTER, Race.orc, TYRANT,
                                                                     ClassLevel.Fourth, ClassType2.Warrior);

        public static readonly ClassId DOMINATOR = new ClassId(115, ClassType.MYSTIC, Race.orc, OVERLORD,
                                                               ClassLevel.Fourth, ClassType2.Enchanter);

        public static readonly ClassId DOOMCRYER = new ClassId(116, ClassType.MYSTIC, Race.orc, WARCRYER,
                                                               ClassLevel.Fourth, ClassType2.Enchanter);

        public static readonly ClassId FORTUNE_SEEKER = new ClassId(117, ClassType.FIGHTER, Race.dwarf, BOUNTY_HUNTER,
                                                                    ClassLevel.Fourth, ClassType2.Rogue);

        public static readonly ClassId MAESTRO = new ClassId(118, ClassType.FIGHTER, Race.dwarf, WARSMITH,
                                                             ClassLevel.Fourth, ClassType2.Warrior);

        public static readonly ClassId DUMMY_ENTRY_31 = new ClassId(119, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_32 = new ClassId(120, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_33 = new ClassId(121, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_34 = new ClassId(122, null, null, null, null, null);

        public static readonly ClassId KAMAEL_M_SOLDIER = new ClassId(123, ClassType.FIGHTER, Race.kamael, null,
                                                                      ClassLevel.First, null);

        public static readonly ClassId KAMAEL_F_SOLDIER = new ClassId(124, ClassType.FIGHTER, Race.kamael, null,
                                                                      ClassLevel.First, null);

        public static readonly ClassId TROOPER = new ClassId(125, ClassType.FIGHTER, Race.kamael, KAMAEL_M_SOLDIER,
                                                             ClassLevel.Second, null);

        public static readonly ClassId WARDER = new ClassId(126, ClassType.FIGHTER, Race.kamael, KAMAEL_F_SOLDIER,
                                                            ClassLevel.Second, null);

        public static readonly ClassId BERSERKER = new ClassId(127, ClassType.FIGHTER, Race.kamael, TROOPER,
                                                               ClassLevel.Third, ClassType2.Warrior);

        public static readonly ClassId M_SOUL_BREAKER = new ClassId(128, ClassType.FIGHTER, Race.kamael, TROOPER,
                                                                    ClassLevel.Third, ClassType2.Wizard);

        public static readonly ClassId F_SOUL_BREAKER = new ClassId(129, ClassType.FIGHTER, Race.kamael, WARDER,
                                                                    ClassLevel.Third, ClassType2.Wizard);

        public static readonly ClassId ARBALESTER = new ClassId(130, ClassType.FIGHTER, Race.kamael, WARDER,
                                                                ClassLevel.Third, ClassType2.Archer);

        public static readonly ClassId DOOMBRINGER = new ClassId(131, ClassType.FIGHTER, Race.kamael, BERSERKER,
                                                                 ClassLevel.Fourth, ClassType2.Warrior);

        public static readonly ClassId M_SOUL_HOUND = new ClassId(132, ClassType.FIGHTER, Race.kamael, M_SOUL_BREAKER,
                                                                  ClassLevel.Fourth, ClassType2.Wizard);

        public static readonly ClassId F_SOUL_HOUND = new ClassId(133, ClassType.FIGHTER, Race.kamael, F_SOUL_BREAKER,
                                                                  ClassLevel.Fourth, ClassType2.Wizard);

        public static readonly ClassId TRICKSTER = new ClassId(134, ClassType.FIGHTER, Race.kamael, ARBALESTER,
                                                               ClassLevel.Fourth, ClassType2.Archer);

        public static readonly ClassId INSPECTOR = new ClassId(135, ClassType.FIGHTER, Race.kamael, TROOPER, WARDER,
                                                               ClassLevel.Third, ClassType2.Enchanter);

        public static readonly ClassId JUDICATOR = new ClassId(136, ClassType.FIGHTER, Race.kamael, INSPECTOR,
                                                               ClassLevel.Fourth, ClassType2.Enchanter);

        public static readonly ClassId DUMMY_ENTRY_35 = new ClassId(137, null, null, null, null, null, null);
        public static readonly ClassId DUMMY_ENTRY_36 = new ClassId(138, null, null, null, null, null, null);

        public static readonly ClassId sigelKnight = new ClassId(139, ClassType.FIGHTER, null, null, null,
                                                                 ClassLevel.Awaking, ClassType2.Knight);

        public static readonly ClassId tyrrWarrior = new ClassId(140, ClassType.FIGHTER, null, null, null,
                                                                 ClassLevel.Awaking, ClassType2.Warrior);

        public static readonly ClassId othellRogue = new ClassId(141, ClassType.FIGHTER, null, null, null,
                                                                 ClassLevel.Awaking, ClassType2.Rogue);

        public static readonly ClassId yulArcher = new ClassId(142, ClassType.FIGHTER, null, null, null,
                                                               ClassLevel.Awaking, ClassType2.Archer);

        public static readonly ClassId feohWizard = new ClassId(143, ClassType.MYSTIC, null, null, null,
                                                                ClassLevel.Awaking, ClassType2.Wizard);

        public static readonly ClassId issEnchanter = new ClassId(144, ClassType.FIGHTER, null, null, null,
                                                                  ClassLevel.Awaking, ClassType2.Enchanter);

        public static readonly ClassId wynnSummoner = new ClassId(145, ClassType.MYSTIC, null, null, null,
                                                                  ClassLevel.Awaking, ClassType2.Summoner);
	    public static readonly ClassId aeoreHealer = new ClassId(146, ClassType.PRIEST, null, null, null, ClassLevel.Awaking, ClassType2.Healer);
        public IEnumerable<ClassId> Values
        {
            get
            {
                yield return HUMAN_FIGHTER;
                yield return WARRIOR;
                yield return GLADIATOR;
                yield return WARLORD;
                yield return KNIGHT;
                yield return PALADIN;
                yield return DARK_AVENGER;
                yield return ROGUE;
                yield return TREASURE_HUNTER;
                yield return HAWKEYE;
                yield return HUMAN_MAGE;
                yield return WIZARD;
                yield return SORCERER;
                yield return NECROMANCER;
                yield return WARLOCK;
                yield return CLERIC;
                yield return BISHOP;
                yield return PROPHET;
                yield return ELVEN_FIGHTER;
                yield return ELVEN_KNIGHT;
                yield return TEMPLE_KNIGHT;
                yield return SWORDSINGER;
                yield return ELVEN_SCOUT;
                yield return PLAIN_WALKER;
                yield return SILVER_RANGER;
                yield return ELVEN_MAGE;
                yield return ELVEN_WIZARD;
                yield return SPELLSINGER;
                yield return ELEMENTAL_SUMMONER;
                yield return ORACLE;
                yield return ELDER;
                yield return DARK_FIGHTER;
                yield return PALUS_KNIGHT;
                yield return SHILLEN_KNIGHT;
                yield return BLADEDANCER;
                yield return ASSASIN;
                yield return ABYSS_WALKER;
                yield return PHANTOM_RANGER;
                yield return DARK_MAGE;
                yield return DARK_WIZARD;
                yield return SPELLHOWLER;
                yield return PHANTOM_SUMMONER;
                yield return SHILLEN_ORACLE;
                yield return SHILLEN_ELDER;
                yield return ORC_FIGHTER;
                yield return ORC_RAIDER;
                yield return DESTROYER;
                yield return ORC_MONK;
                yield return TYRANT;
                yield return ORC_MAGE;
                yield return ORC_SHAMAN;
                yield return OVERLORD;
                yield return WARCRYER;
                yield return DWARVEN_FIGHTER;
                yield return SCAVENGER;
                yield return BOUNTY_HUNTER;
                yield return ARTISAN;
                yield return WARSMITH;
                yield return DUMMY_ENTRY_1;
                yield return DUMMY_ENTRY_2;
                yield return DUMMY_ENTRY_3;
                yield return DUMMY_ENTRY_4;
                yield return DUMMY_ENTRY_5;
                yield return DUMMY_ENTRY_6;
                yield return DUMMY_ENTRY_7;
                yield return DUMMY_ENTRY_8;
                yield return DUMMY_ENTRY_9;
                yield return DUMMY_ENTRY_10;
                yield return DUMMY_ENTRY_11;
                yield return DUMMY_ENTRY_12;
                yield return DUMMY_ENTRY_13;
                yield return DUMMY_ENTRY_14;
                yield return DUMMY_ENTRY_15;
                yield return DUMMY_ENTRY_16;
                yield return DUMMY_ENTRY_17;
                yield return DUMMY_ENTRY_18;
                yield return DUMMY_ENTRY_19;
                yield return DUMMY_ENTRY_20;
                yield return DUMMY_ENTRY_21;
                yield return DUMMY_ENTRY_22;
                yield return DUMMY_ENTRY_23;
                yield return DUMMY_ENTRY_24;
                yield return DUMMY_ENTRY_25;
                yield return DUMMY_ENTRY_26;
                yield return DUMMY_ENTRY_27;
                yield return DUMMY_ENTRY_28;
                yield return DUMMY_ENTRY_29;
                yield return DUMMY_ENTRY_30;
                yield return DUELIST;
                yield return DREADNOUGHT;
                yield return PHOENIX_KNIGHT;
                yield return HELL_KNIGHT;
                yield return SAGITTARIUS;
                yield return ADVENTURER;
                yield return ARCHMAGE;
                yield return SOULTAKER;
                yield return ARCANA_LORD;
                yield return CARDINAL;
                yield return HIEROPHANT;
                yield return EVAS_TEMPLAR;
                yield return SWORD_MUSE;
                yield return WIND_RIDER;
                yield return MOONLIGHT_SENTINEL;
                yield return MYSTIC_MUSE;
                yield return ELEMENTAL_MASTER;
                yield return EVAS_SAINT;
                yield return SHILLIEN_TEMPLAR;
                yield return SPECTRAL_DANCER;
                yield return GHOST_HUNTER;
                yield return GHOST_SENTINEL;
                yield return STORM_SCREAMER;
                yield return SPECTRAL_MASTER;
                yield return SHILLIEN_SAINT;
                yield return TITAN;
                yield return GRAND_KHAVATARI;
                yield return DOMINATOR;
                yield return DOOMCRYER;
                yield return FORTUNE_SEEKER;
                yield return MAESTRO;
                yield return DUMMY_ENTRY_31;
                yield return DUMMY_ENTRY_32;
                yield return DUMMY_ENTRY_33;
                yield return DUMMY_ENTRY_34;
                yield return KAMAEL_M_SOLDIER;
                yield return KAMAEL_F_SOLDIER;
                yield return TROOPER;
                yield return WARDER;
                yield return BERSERKER;
                yield return M_SOUL_BREAKER;
                yield return F_SOUL_BREAKER;
                yield return ARBALESTER;
                yield return DOOMBRINGER;
                yield return M_SOUL_HOUND;
                yield return F_SOUL_HOUND;
                yield return TRICKSTER;
                yield return INSPECTOR;
                yield return JUDICATOR;
                yield return DUMMY_ENTRY_35;
                yield return DUMMY_ENTRY_36;
                yield return sigelKnight;
                yield return tyrrWarrior;
                yield return othellRogue;
                yield return yulArcher;
                yield return feohWizard;
                yield return issEnchanter;
                yield return wynnSummoner;
                yield return aeoreHealer;
            }
        }
    }
}
